
//write.cc
 
#include <iostream>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
 
#define ERR_EXIT(m) \
do \
{   \
    perror(m); \
    exit(EXIT_FAILURE); \
}while(0)

//读取管道文件，写入文件中

int main()
{
    umask(0);
    //  1. 以读的方式打开管道文件fifo
    int outfd=open("fifo",O_RDONLY,0666);
    if(outfd==-1)
    {
        ERR_EXIT("infd");
    }

    //  2. 以写方式打开目标文件
    int infd=open("hello",O_CREAT|O_WRONLY|O_TRUNC,0666);
    if(infd==-1)
    {
        ERR_EXIT("infd");
    }

    char buf[1024];
    char n;

    // 3.从管道文件fifo中读数据并写入到目标文件中
    while((n=read(outfd,buf,1024))>0)
    {
        write(infd,buf,n);
    }
    close(infd);
    close(outfd);

    // 删除管道文件 -- 系统调用
    unlink("fifo");

    return 0;
}